Completed
Push — master ( 17669b...b8e030 )
by Rain
02:40
created

Folders.js ➔ ... ➔ ???   A

Complexity

Conditions 1
Paths 4

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 12
Bugs 0 Features 0
Metric Value
cc 1
c 12
b 0
f 0
nc 4
nop 0
dl 0
loc 9
rs 9.6666
1
2
import ko from 'ko';
3
4
import {ClientSideKeyName, Notification, Magics} from 'Common/Enums';
5
import {trim, noop} from 'Common/Utils';
6
import {getNotification, i18n} from 'Common/Translator';
7
8
import {removeFolderFromCacheList} from 'Common/Cache';
9
10
import {appSettingsGet} from 'Storage/Settings';
11
import * as Local from 'Storage/Client';
12
13
import FolderStore from 'Stores/User/Folder';
14
15
import Promises from 'Promises/User/Ajax';
16
import Remote from 'Remote/User/Ajax';
17
18
import {getApp} from 'Helper/Apps/User';
19
20
import {showScreenPopup} from 'Knoin/Knoin';
21
22
class FoldersUserSettings
23
{
24
	constructor() {
25
		this.displaySpecSetting = FolderStore.displaySpecSetting;
26
		this.folderList = FolderStore.folderList;
27
28
		this.folderListHelp = ko.observable('').extend({throttle: Magics.Time100ms});
29
30
		this.loading = ko.computed(() => {
31
			const
32
				loading = FolderStore.foldersLoading(),
33
				creating = FolderStore.foldersCreating(),
34
				deleting = FolderStore.foldersDeleting(),
35
				renaming = FolderStore.foldersRenaming();
36
37
			return loading || creating || deleting || renaming;
38
		});
39
40
		this.folderForDeletion = ko.observable(null).deleteAccessHelper();
41
42
		this.folderForEdit = ko.observable(null).extend({toggleSubscribeProperty: [this, 'edited']});
43
44
		this.useImapSubscribe = !!appSettingsGet('useImapSubscribe');
45
	}
46
47
	folderEditOnEnter(folder) {
48
		const nameToEdit = folder ? trim(folder.nameForEdit()) : '';
49
50
		if ('' !== nameToEdit && folder.name() !== nameToEdit)
51
		{
52
			Local.set(ClientSideKeyName.FoldersLashHash, '');
53
54
			getApp().foldersPromisesActionHelper(
55
				Promises.folderRename(folder.fullNameRaw, nameToEdit, FolderStore.foldersRenaming),
56
				Notification.CantRenameFolder
57
			);
58
59
			removeFolderFromCacheList(folder.fullNameRaw);
60
61
			folder.name(nameToEdit);
62
		}
63
64
		folder.edited(false);
65
	}
66
67
	folderEditOnEsc(folder) {
68
		if (folder)
69
		{
70
			folder.edited(false);
71
		}
72
	}
73
74
	onShow() {
75
		FolderStore.folderList.error('');
76
	}
77
78
	onBuild(oDom) {
79
		oDom
80
			.on('mouseover', '.delete-folder-parent', () => {
81
				this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_DELETE_FOLDER'));
82
			})
83
			.on('mouseover', '.subscribe-folder-parent', () => {
84
				this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER'));
85
			})
86
			.on('mouseover', '.check-folder-parent', () => {
87
				this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_CHECK_FOR_NEW_MESSAGES'));
88
			})
89
			.on('mouseout', '.subscribe-folder-parent, .check-folder-parent, .delete-folder-parent', () => {
90
				this.folderListHelp('');
91
			});
92
	}
93
94
	createFolder() {
95
		showScreenPopup(require('View/Popup/FolderCreate'));
96
	}
97
98
	systemFolder() {
99
		showScreenPopup(require('View/Popup/FolderSystem'));
100
	}
101
102
	deleteFolder(folderToRemove) {
103
		if (folderToRemove && folderToRemove.canBeDeleted() && folderToRemove.deleteAccess() &&
104
			0 === folderToRemove.privateMessageCountAll())
105
		{
106
			this.folderForDeletion(null);
107
108
			if (folderToRemove)
109
			{
110
				const
111
					fRemoveFolder = function(folder) {
112
						if (folderToRemove === folder)
113
						{
114
							return true;
115
						}
116
						folder.subFolders.remove(fRemoveFolder);
117
						return false;
118
					};
119
120
				Local.set(ClientSideKeyName.FoldersLashHash, '');
121
122
				FolderStore.folderList.remove(fRemoveFolder);
123
124
				getApp().foldersPromisesActionHelper(
125
					Promises.folderDelete(folderToRemove.fullNameRaw, FolderStore.foldersDeleting),
126
					Notification.CantDeleteFolder
127
				);
128
129
				removeFolderFromCacheList(folderToRemove.fullNameRaw);
130
			}
131
		}
132
		else if (0 < folderToRemove.privateMessageCountAll())
133
		{
134
			FolderStore.folderList.error(getNotification(Notification.CantDeleteNonEmptyFolder));
135
		}
136
	}
137
138
	subscribeFolder(folder) {
139
		Local.set(ClientSideKeyName.FoldersLashHash, '');
140
		Remote.folderSetSubscribe(noop, folder.fullNameRaw, true);
141
		folder.subScribed(true);
142
	}
143
144
	unSubscribeFolder(folder) {
145
		Local.set(ClientSideKeyName.FoldersLashHash, '');
146
		Remote.folderSetSubscribe(noop, folder.fullNameRaw, false);
147
		folder.subScribed(false);
148
	}
149
150
	checkableTrueFolder(folder) {
151
		Remote.folderSetCheckable(noop, folder.fullNameRaw, true);
152
		folder.checkable(true);
153
	}
154
155
	checkableFalseFolder(folder) {
156
		Remote.folderSetCheckable(noop, folder.fullNameRaw, false);
157
		folder.checkable(false);
158
	}
159
}
160
161
export {FoldersUserSettings, FoldersUserSettings as default};
162